/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package responsabile;

import ejb.GestioneSediLocal;
import ejb.GestoreAmministratoreLocal;
import it.uninsieme.common.Utility;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.model.SelectItem;
import jpa.Responsabile;
import jpa.Sede;

/**
 *
 * @author Administrator
 */
@ManagedBean(name = "SedeBean")
@ViewScoped
public class SedeBean {

    @EJB
    GestioneSediLocal gsedi;
    @EJB
    GestoreAmministratoreLocal gresp;

    private String citta;
    private String via;
    private String cap;
    private String telefono;
    private String provincia;
    private String email;
    private String responsabile;
    private String cittaModifica;
    private String viaModifica;
    private String capModifica;
    private String telefonoModifica;
    private String provinciaModifica;
    private String emailModifica;
    private String responsabileModifica;
    private String message;
    private String idSede;
    private String idSedeElimina;
    private List<SelectItem> listaResponsabili;
    private List<Responsabile> responsabili;
    private List<SelectItem> listaSedi;
    private List<Sede> sedi;
    private HashMap<Integer, Sede> mappaSedi;
    private Integer vista;

    /**
     * Creates a new instance of SedeBean
     */
    public SedeBean() {
    }

    public Collection<SelectItem> getlistaSedi() {
        if (listaSedi == null) {
            listaSedi = new ArrayList<>();
        }
        if (mappaSedi == null) {
            mappaSedi = new HashMap<>();
        }
        if (listaSedi.isEmpty()) {
            sedi = gsedi.listaSedi();
            for (Sede p : sedi) {
                listaSedi.add(new SelectItem(p.getId(), p.getCitta() + " - via " + p.getVia()));
                mappaSedi.put(p.getId(), p);
            }
            Utility.ordinaListaLabel(listaSedi);
        }
        if (listaSedi.size() > 0) {
            Integer indice;
            try {
                indice = Integer.valueOf(idSede);
            } catch (NumberFormatException x) {
                indice = (Integer) listaSedi.get(0).getValue();
            }
            assegnaValoriLabel(mappaSedi.get(indice).getId());
        }
        return Collections.unmodifiableCollection(listaSedi);
    }

    public void setlistaSedi(List<SelectItem> listaSedi) {
        this.listaSedi = listaSedi;
    }

    public String getCapModifica() {
        return capModifica;
    }

    public void setCapModifica(String capModifica) {
        this.capModifica = capModifica;
    }

    public String getCittaModifica() {
        return cittaModifica;
    }

    public void setCittaModifica(String cittaModifica) {
        this.cittaModifica = cittaModifica;
    }

    public String getEmailModifica() {
        return emailModifica;
    }

    public void setEmailModifica(String emailModifica) {
        this.emailModifica = emailModifica;
    }

    public String getIdSede() {
        return idSede;
    }

    public void setIdSede(String idSede) {
        this.idSede = idSede;
    }

    public String getIdSedeElimina() {
        return idSedeElimina;
    }

    public void setIdSedeElimina(String idSedeElimina) {
        this.idSedeElimina = idSedeElimina;
    }

    public String getProvinciaModifica() {
        return provinciaModifica;
    }

    public void setProvinciaModifica(String provinciaModifica) {
        this.provinciaModifica = provinciaModifica;
    }

    public String getResponsabileModifica() {
        return responsabileModifica;
    }

    public void setResponsabileModifica(String responsabileModifica) {
        this.responsabileModifica = responsabileModifica;
    }

    public String getTelefonoModifica() {
        return telefonoModifica;
    }

    public void setTelefonoModifica(String telefonoModifica) {
        this.telefonoModifica = telefonoModifica;
    }

    public String getViaModifica() {
        return viaModifica;
    }

    public void setViaModifica(String viaModifica) {
        this.viaModifica = viaModifica;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public String getCap() {
        return cap;
    }

    public void setCap(String cap) {
        this.cap = cap;
    }

    public String getCitta() {
        return citta;
    }

    public void setCitta(String citta) {
        this.citta = citta;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public Collection<SelectItem> getlistaResponsabili() {
        listaResponsabili = new ArrayList<>();
        responsabili = gresp.listaResponsabile();
        for (Responsabile p : responsabili) {
            String text = "ID:" + p.getId() + " - " + p.getCognome() + " " + p.getNome();
            listaResponsabili.add(new SelectItem(p.getId(), text));
        }
        Utility.ordinaListaLabel(listaResponsabili);
        return Collections.unmodifiableCollection(listaResponsabili);
    }

    public void setlistaResponsabili(List<SelectItem> listaResponsabili) {
        this.listaResponsabili = listaResponsabili;
    }

    public String getProvincia() {
        return provincia;
    }

    public void setProvincia(String provincia) {
        this.provincia = provincia;
    }

    public String getResponsabile() {
        return responsabile;
    }

    public void setResponsabile(String responsabile) {
        this.responsabile = responsabile;
    }

    public Collection<Responsabile> getResponsabili() {
        return Collections.unmodifiableCollection(responsabili);
    }

    public void setResponsabili(List<Responsabile> responsabili) {
        this.responsabili = responsabili;
    }

    public String getTelefono() {
        return telefono;
    }

    public void setTelefono(String telefono) {
        this.telefono = telefono;
    }

    public String getVia() {
        return via;
    }

    public void setVia(String via) {
        this.via = via;
    }

    public String crea() {
        Sede t = new Sede();
        if ("".equals(cap)) {
            message = "Devi inserire un CAP";
            return "errore";
        }
        try {
            t.setCap(new Integer(cap));
        } catch (NumberFormatException nfe) {
            message = "Il CAP contiene solo numeri";
            return "errore";
        }
        if ("".equals(citta)) {
            message = "Devi inserire una città";
            return "errore";
        }
        t.setCitta(citta);
        if ("".equals(email)) {
            message = "Devi inserire una email";
            return "errore";
        }
        t.setEmail(email);
        t.setProvincia(provincia);
        try {
            t.setTelefono(new Integer(telefono));
        } catch (NumberFormatException nfe) {
            message = "Il telefono contiene solo numeri";
            return "errore";
        }
        if ("".equals(via)) {
            message = "Devi inserire una via";
            return "errore";
        }
        t.setVia(via);
        try {
            t.setResponsabileid(new Integer(responsabile));
        } catch (NumberFormatException nfe) {
            message = "Non ci sono Responsabili disponibili";
            return "errore";
        }
        boolean reg = gsedi.crea(t);
        if (reg == false) {
            message = "Errore nella registrazione della sede nel database";
            return "errore";
        }
        message = "Registrazione effettuata correttemente";
        return "GestioneSedi";
    }

    public String modifica() {
        Sede t = new Sede();
        t.setId(new Integer(idSede));
        if ("".equals(cap)) {
            message = "Devi inserire un CAP";
            return "errore";
        }
        try {
            t.setCap(new Integer(capModifica));
        } catch (NumberFormatException nfe) {
            message = "Il CAP contiene solo numeri";
            return "errore";
        }
        if ("".equals(cittaModifica)) {
            message = "Devi inserire una città";
            return "errore";
        }
        t.setCitta(cittaModifica);
        if ("".equals(emailModifica)) {
            message = "Devi inserire una email";
            return "errore";
        }
        t.setEmail(emailModifica);
        t.setProvincia(provinciaModifica);
        if ("".equals(telefonoModifica)) {
            message = "Devi inserire un telefono";
            return "errore";
        }
        try {
            t.setTelefono(new Integer(telefonoModifica));
        } catch (NumberFormatException nfe) {
            message = "Il telefono contiene solo numeri";
            return "errore";
        }
        if ("".equals(viaModifica)) {
            message = "Devi inserire una via";
            return "errore";
        }
        t.setVia(viaModifica);
        t.setResponsabileid(new Integer(responsabileModifica));
        boolean reg = gsedi.modifica(t);
        if (reg == false) {
            message = "Risulta già una sede con questi dati";
            return "errore";
        }
        message = "Modifica effettuata correttemente";
        return "GestioneSedi";
    }

    public String elimina() {
        boolean reg = gsedi.elimina(new Integer(idSedeElimina));
        if (reg == false) {
            message = "Errore nell'eliminazione della sede dal database";
            return "errore";
        }
        message = "Eliminazione effettuata correttemente";
        return "GestioneSedi";
    }

    private void assegnaValoriLabel(Integer id) {
        if (id == null) {
            return;
        }
        Sede s = mappaSedi.get(id);
        setCittaModifica(s.getCitta());
        setViaModifica(s.getVia());
        setCapModifica(s.getCap().toString());
        setTelefonoModifica(s.getTelefono().toString());
        setProvinciaModifica(s.getProvincia());
        setEmailModifica(s.getEmail());
        setResponsabileModifica(s.getResponsabileid().toString());
    }

}
